<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

    <script>
        // const p = new Promise(function (resolve, reject) {
        //     resolve('找到水')
        //     reject('水被污染')
        //     resolve('污染源被清除')
        //     if (Math.random() > 0.5) {
        //         resolve()
        //     } else {
        //         reject()
        //     }
        // })
        // console.log(p);

        // function rcoin() {
        //     return Math.random() < 0.5
        // }
        // let p = new Promise((resolve, reject) => {
        //     console.log('有一天，我和2108班出去作战，去了阿富汗');
        //     resolve('大家让史记去侦查敌情')
        // })
        // let p1 = p.then((v) => {
        //     console.log('然后', v);
        //     return '史记带着水壶触出发了'
        // })
        // let p2 = p1.then(v => {
        //     console.log('然后', v);
        //     const f = rcoin()
        //     console.log('判定：', f);
        //     if (f) {
        //         return '史记朝着山的那边，海的那边走去'
        //     } else {
        //         throw '史记突然想到没带武器'
        //     }
        // })
        // let p3 = p2.then(v => {
        //     console.log('然后', v);
        //     console.log('到了地方发现有一群。。。蓝精灵，于是乎。。。。');
        //     return '大家一起来'
        // }, r => {
        //     console.error('错误', r);
        //     return '返回营房拿他的RPG'
        // }
        // )


        // function delay(ms, callback) {
        //     setTimeout(callback, ms)
        // }

        // //回调地狱
        // delay(1000, () => {
        //     delay(2000, () => {
        //         delay(1000, () => console.log(3))
        //         console.log(2)
        //     })
        //     console.log(1)
        // })


        function delay(ms) {
            return new Promise((resolve, reject) => {
                setTimeout(resolve, ms)
            })
        }
        delay(2000).then(() => {
            console.log(1)
            return delay(2000)
        })
            .then(() => {
                console.log(2)
                return delay(2000)
            })
            .then(() => {
                console.log(3);
            })



        function fn(n) {
            return new Promise(resolve => resolve(n))
        }
        let obj = { a: 1 }
        console.log(onj, fn(obj));


        new Promise(resolve => resolve())
            .then(() => fn(obj))
            .then(v => console.log(obj))
    </script>
</body>

</html>